]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
magnifier: Track cursor sprite changes only when active
authorMarco Trevisan (Treviño) <mail@3v1n0.net>
Mon, 11 Mar 2019 21:09:08 +0000 (17:09 -0400)
committerMarco Trevisan (Treviño) <mail@3v1n0.net>
Mon, 1 Apr 2019 20:34:44 +0000 (16:34 -0400)
There's no point in keeping the cursor sprite texture around all the time,
and to listen for its changes, we just need this when the magnifier is active.

So, initialize the magnifier texture and monitor for the sprite changes on
activation, while disconnect from the signal and nullify the texture when
the magnifier is deactivated.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/443

js/ui/magnifier.js

index f6b0e955022c0917300a6099453aece5dc33457b..b01e8b6b2738ee0b16d287956c5f31d2725c767f 100644 (file)
@@ -88,7 +88,7 @@ var MouseSpriteContent = GObject.registerClass({
         this._texture = coglTexture;
         this.invalidate();
 
-        if (!oldTexture ||
+        if (!oldTexture || !coglTexture ||
             oldTexture.get_width() != coglTexture.get_width() ||
             oldTexture.get_height() != coglTexture.get_height())
             this.invalidate_size();
@@ -106,7 +106,6 @@ var Magnifier = class Magnifier {
 
         this._mouseSprite = new Clutter.Actor({ request_mode: Clutter.RequestMode.CONTENT_SIZE });
         this._mouseSprite.content = new MouseSpriteContent();
-        this._updateSpriteTexture();
 
         this._cursorRoot = new Clutter.Actor();
         this._cursorRoot.add_actor(this._mouseSprite);
@@ -122,8 +121,6 @@ var Magnifier = class Magnifier {
         let showAtLaunch = this._settingsInit(aZoomRegion);
         aZoomRegion.scrollContentsTo(this.xMouse, this.yMouse);
 
-        cursorTracker.connect('cursor-changed', this._updateMouseSprite.bind(this));
-
         // Export to dbus.
         magDBusService = new MagnifierDBus.ShellMagnifier();
         this.setActive(showAtLaunch);
@@ -159,9 +156,15 @@ var Magnifier = class Magnifier {
 
         if (isActive != activate) {
             if (activate) {
+                this._updateMouseSprite();
+                this._cursorSpriteChangedId =
+                    this._cursorTracker.connect('cursor-changed',
+                                                this._updateMouseSprite.bind(this));
                 Meta.disable_unredirect_for_display(global.display);
                 this.startTrackingMouse();
             } else {
+                this._cursorTracker.disconnect(this._cursorSpriteChangedId);
+                this._mouseSprite.content.texture = null;
                 Meta.enable_unredirect_for_display(global.display);
                 this.stopTrackingMouse();
             }